package com.linzm.leetcode.primary.exercises4_20230129;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;

/**
 * @Author zimingl
 * @Date 2023/1/30 22:10
 * @Description: 数组形式的整数加法
 */
public class Demo4_989 {
    /**
     * 整数的 数组形式  num 是按照从左到右的顺序表示其数字的数组。
     * 例如，对于 num = 1321 ，数组形式是 [1,3,2,1] 。
     * 给定 num ，整数的 数组形式 ，和整数 k ，返回 整数 num + k 的 数组形式 。
     * 输入：num = [1,2,0,0], k = 34
     * 输出：[1,2,3,4]
     * 解释：1200 + 34 = 1234
     * 输入：num = [2,7,4], k = 181
     * 输出：[4,5,5]
     * 解释：274 + 181 = 455
     */
    public static void main(String[] args) {
        int[] num = {1,1,1,2,3};
        int k = 912;
        Demo4_989 demo4_989 = new Demo4_989();
        List<Integer> addToArrayForm = demo4_989.addToArrayForm(num, k);
        String[] strings = addToArrayForm.stream().map(String::valueOf).toArray(String[]::new);
        System.out.println(String.join(" ", strings));
    }

    public List<Integer> addToArrayForm2(int[] num, int k) {
        String[] strings = Arrays.stream(num).mapToObj(String::valueOf).toArray(String[]::new);
        String numStr = String.join("", strings);
        List<Integer> list = new ArrayList<>();
        int sum = 0;
        if (numStr.length() > 4) {
            String endString = numStr.substring(numStr.length() - 4);
            String startString = numStr.substring(0, numStr.length() - 4);
            int numLong = Integer.parseInt(endString);
            sum = numLong + k;
            if (sum > 10000) {
                int tmp1 = sum / 10000;
                int index = startString.length() + 1;
                int[] arr = new int[startString.length() + 1];
                for (int i = 0; i < startString.length(); i++) {
                    int tmp2 = startString.charAt(i) - '0' + tmp1;
                    if (tmp2 > 10) {
                        arr[index] = tmp2 % 10;
                    }
                }
            }
        } else {
            int numLong = Integer.parseInt(numStr);
            sum = numLong + k;
        }
        String sumStr = sum + "";
        for (int i = 0; i < sumStr.length() ; i++) {
            list.add(sumStr.charAt(i) - '0');
        }
        return list;
    }

    // 99 111 200    999 1 1000
    public List<Integer> addToArrayForm(int[] num, int k) {
        List<Integer> res = new ArrayList<>();
        int n = num.length;
        for (int i = n - 1; i >= 0 || k > 0; --i, k /= 10) {
            if (i >= 0) {
                k += num[i];
            }
            res.add(k % 10);
        }
        Collections.reverse(res);
        return res;
    }
}
